package com.example.travelplan.app;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;

import com.example.travelplan.app.dominio.Controller;
import com.example.travelplan.app.dominio.Roteiro;
import com.example.travelplan.app.dominio.TipoLugar;
import com.example.travelplan.app.dominio.Cidade;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Calendar;
import android.app.DatePickerDialog;
import android.widget.DatePicker;
import android.support.v4.app.DialogFragment;
import android.app.Dialog;

import static android.view.View.*;
import static android.widget.AdapterView.*;
import static android.widget.Toast.*;
import android.app.DatePickerDialog;
import android.widget.Toast;

/**
 * Created by Rodrigo on 18/06/2014.
 */
public class janelaCriarRoteiroActivity extends Activity {

    private Roteiro mRoteiro;
    private ListView atividades;
    private String strDataSelecionado;

    private Integer pYear;
    private Integer pMonth;
    private Integer pDay;

    /** This integer will uniquely define the dialog to be used for displaying date picker.*/
    static final int DATE_DIALOG_ID = 0;

    static final int numeroBtDataInicio =  0;
    static final int numeroBtDataFinal =  1;

    int numeroBtClicado;

    /** Callback received when the user "picks" a date in the dialog */
    private DatePickerDialog.OnDateSetListener pDateSetListener =
            new DatePickerDialog.OnDateSetListener() {

                public void onDateSet(DatePicker view, int year,
                                      int monthOfYear, int dayOfMonth) {
                    pYear = year;
                    pMonth = monthOfYear +1;
                    pDay = dayOfMonth;
                    updateDisplay();
                }
            };

    /** Updates the date in the TextView */
    private void updateDisplay() {

        Integer mes = pMonth + 1;
        strDataSelecionado=  pDay.toString() + ("/") +
                pMonth.toString()  + ("/") +
                pYear.toString() ;

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

        Date data = null;
        try {
            data = sdf.parse(strDataSelecionado);
        }

        catch (Exception e) {
            data = new Date();
        }

        switch (numeroBtClicado){

            case numeroBtDataInicio :
                EditText edDataida = (EditText)findViewById(R.id.ed_dataIda);
                edDataida.setText(strDataSelecionado);
                mRoteiro.setM_dataIda(data);

                break;
            case numeroBtDataFinal:
                EditText edDataVolta = (EditText)findViewById(R.id.ed_dateVolta);
                edDataVolta.setText(strDataSelecionado);
                mRoteiro.setM_datavolta(data);
        }
      }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_criarroteiro);
        getActionBar().hide();

        int current = getRequestedOrientation();
        // only switch the orientation if not in portrait
        if ( current != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ) {
            setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_PORTRAIT );
        }

        Bundle b = getIntent().getExtras();
        int value = b.getInt("idCidade");

        adicionarAtividades(value);

        Cidade cidade =  Controller.getInstance().obterCidade(value);
        EditText textoCidade = (EditText)findViewById(R.id.ed_local);
        textoCidade.setText(cidade.getM_nome());
        configurarAcoesBotoes();

        mRoteiro = new Roteiro(cidade);

        // ListView Item Click Listener
        atividades.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    }

    public void adicionarAtividades(int idCidade)
    {

        atividades = (ListView) findViewById(R.id.listv_atividades);
        List<TipoLugar> listTipoLugar = Controller.getInstance().obterTipoLugar();
        List<String> list = new ArrayList<String>();

        for (int i = 0; i < listTipoLugar.size(); i++) {
            list.add(listTipoLugar.get(i).getM_nome());
        }

        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice, list);
        atividades.setAdapter(dataAdapter);
    }

    private void configurarAcoesBotoes()
    {
        ImageButton bt_calendarioIda = (ImageButton)findViewById(R.id.bt_calendarioDtIda);
        bt_calendarioIda.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                numeroBtClicado = numeroBtDataInicio;
                showDialog(DATE_DIALOG_ID);
            }
        });

        ImageButton bt_calendarioVolta = (ImageButton)findViewById(R.id.bt_calendarioDtVolta);
        bt_calendarioVolta.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                numeroBtClicado = numeroBtDataFinal;
                showDialog(DATE_DIALOG_ID);
            }
        });

        final EditText edDataida = (EditText)findViewById(R.id.ed_dataIda);

        edDataida.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                numeroBtClicado = numeroBtDataInicio;
                showDialog(DATE_DIALOG_ID);
            }
        });

        final EditText edDataVolta = (EditText)findViewById(R.id.ed_dateVolta);

        edDataVolta.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                numeroBtClicado = numeroBtDataFinal;
                showDialog(DATE_DIALOG_ID);
            }
        });

        Calendar calendario = Calendar.getInstance();
        pYear = calendario.get(Calendar.YEAR);
        pMonth = calendario.get(Calendar.MONTH);
        pDay = calendario.get(Calendar.DAY_OF_MONTH);

        ImageButton bt_voltar = (ImageButton)findViewById(R.id.bt_voltar);
        final Intent intentPricipal = new Intent(this, FullscreenActivity.class);

        bt_voltar.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                startActivity(intentPricipal);
            }
        });

        Button bt_cancelar = (Button)findViewById(R.id.bt_cancelar_roteiro);
        bt_cancelar.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                startActivity(intentPricipal);
            }
        });

        final AlertDialog.Builder curtir = new AlertDialog.Builder(this);
        Button bt_criar = (Button)findViewById(R.id.bt_criar_roteiro);
        final Intent intentSalvar = new Intent(this, janelaSalvarRoteiroActivity.class);
        bt_criar.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                String[] str =  getListStringAtividades();
                if(str.length == 0)
                {
                    makeText(getApplicationContext(), "Selecione ao menos uma atividade.",LENGTH_SHORT).show();
                    return;
                }

                if(edDataida.getText().length() == 0)
                {
                    makeText(getApplicationContext(), "Selecione a data de ida.",LENGTH_SHORT).show();
                    return;
                }

                if(edDataVolta.getText().length() == 0)
                {
                    makeText(getApplicationContext(), "Selecione a data de volta.",LENGTH_SHORT).show();
                    return;
                }

                Calendar day1 = Calendar.getInstance();
                day1.setTime(mRoteiro.getM_dataIda());

                Calendar day2 = Calendar.getInstance();
                day2.setTime(mRoteiro.getM_datavolta());

                int from = day1.get(Calendar.DAY_OF_YEAR);
                int to = day2.get(Calendar.DAY_OF_YEAR);

                int difference = to-from;

                if(difference > 20) {
                    makeText(getApplicationContext(), "O TravelPlan tém o limite de 20 dias por roteiro.",LENGTH_SHORT).show();
                    return;
                }


                curtir.setPositiveButton("Ok",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                            }
                        }
                );

                int idRoteiro = Controller.getInstance().criarRoteiro(mRoteiro,str);

                Bundle b = new Bundle();
                b.putInt("idRoteiro", idRoteiro);
                intentSalvar.putExtras(b);
                startActivity(intentSalvar);
            }
        });


    }

    private String[] getListStringAtividades(){
        int quantidade = atividades.getCheckedItemCount();
        String[] listStringAtividades = new String[quantidade];

        SparseBooleanArray listaPosicoes = atividades.getCheckedItemPositions();

        int index = 0;
        for(int i = 0; i < atividades.getCount(); i++)
        {
            if(listaPosicoes.get(i)){
                listStringAtividades[index] = (String)atividades.getItemAtPosition(i);
                index++;
            }
        }

        return listStringAtividades;
    }

    /** Create a new dialog for date picker */
    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case DATE_DIALOG_ID:
                return new DatePickerDialog(this,
                        pDateSetListener,
                        pYear, pMonth, pDay);
        }
        return null;
    }
}
